ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース7.0
E05172-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

キャッシュ・グループでのエージングの実装

CREATE CACHE GROUP文の表定義でキャッシュ・グループのルート表に対してエージング・ポリシーを指定できます。エージング・ポリシーは、エージングのタイプと状態(ONまたはOFF)を参照します。

キャッシュ・グループに対して、使用状況ベースまたは時間ベースのいずれかのタイプのエージングを指定できます。使用状況ベースのエージングでは、指定されたデータ・ストアの使用状況の範囲内の最低使用頻度(LRU)のデータが削除されます。時間ベースのエージングでは、指定されたデータ存続期間およびエージング・プロセスの頻度に基づいてデータが削除されます。

エージングは、キャッシュ・インスタンスに基づいているため、キャッシュ・グループのルート表に対してのみ定義できます。キャッシュ・グループにない表に対してエージングを定義することもできます。キャッシュ・グループにない表に対するエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表でのエージングの実装に関する説明を参照してください。

同じシステムで使用状況ベースのエージングと時間ベースのエージングの両方を構成できますが、特定のキャッシュ・グループまたは表に対して定義できるエージングのタイプは1つだけです。

この項の内容は次のとおりです。

使用状況ベースのエージング

使用状況ベースのエージングを使用すると、最低使用頻度(LRU)のデータを削除することによって、データ・ストアで使用されるメモリーの量を、指定されたしきい値内に維持できます。LRUエージングは、AUTOREFRESH属性が指定されているキャッシュ・グループを除く、すべてのタイプのキャッシュ・グループで使用できます。

CREATE CACHE GROUP文の表定義のAGING LRU句を使用して、キャッシュ・グループに対してLRUエージングを定義します。OFFを指定しないかぎり、エージングはキャッシュ・グループの作成後すぐに開始します。

データ・ストアのすべての表に対してLRUエージング属性を指定するには、ttAgingLRUConfig組込みプロシージャを使用します。次の表に、LRUエージング属性の概要を示します。

LRUエージング属性
説明

LowUsageThreshhold

LRUエージングが無効になるデータ・ストアの割合であるPermSize。デフォルトは80パーセントです。

HighUsageThreshhold

LRUエージングがアクティブになるデータ・ストアの割合であるPermSize。デフォルトは90パーセントです。

AgingCycle

エージング・サイクル間の分数。デフォルトは1分です。

ALTER TABLE文を使用して次の手順を実行できます。

エージングを開始するタイミングを制御するには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、「エージングが開始するタイミングの制御」を参照してください。

キャッシュ・グループに対するエージングをLRUから時間ベースに変更するには、最初に、DROP AGING句を指定したALTER TABLE文を使用して、エージングを削除します。次に、キャッシュ・グループのルート表に対して、ADD AGING USE ... LIFETIME句を指定したALTER TABLE文を使用して、時間ベースのエージングを追加します。

時間ベースのエージング

時間ベースのエージングでは、指定されたデータ存続期間およびエージング・プロセスの頻度に基づいてキャッシュ・グループからデータが削除されます。CREATE CACHE GROUP文の表定義のAGING USE句で時間ベースのエージングを定義します。AGING USE句は、値がアプリケーションによって更新されるルート表のタイムスタンプ列を参照します。

CREATE CACHE GROUP文の表定義にあるAGING USE句のLIFETIME部分で存続期間(日、時間または分)を指定します。AGING USE句のCYCLE部分を使用して、指定された存続期間を超えたデータを削除するために、システムが行を調査する頻度を指定します。CYCLEを指定しない場合、エージングは5分ごとに発生します。OFFを指定しないかぎり、エージングはキャッシュ・グループの作成後すぐに開始します。

ALTER TABLE文を使用して次の手順を実行します。

エージングを開始するタイミングを制御するには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、 「エージングを開始するタイミングの制御」を参照してください。

キャッシュ・グループに対するエージングを時間ベースからLRUエージングに変更するには、最初にエージングを削除します。次に、キャッシュ・グループのルート表に対して、ADD AGING LRU句を指定したALTER TABLE文を使用して、LRUエージングを追加します。


注意: AUTOREFRESHキャッシュ・グループのルート表を変更する場合は、キャッシュ・エージェントを停止する必要があります。

エージングを開始するタイミングの制御

エージングを開始するタイミングを制御するには、ttAgingScheduleNow組込みプロシージャを使用します。ttAgingScheduleNowをコールすると、状態がON(有効)であるか、OFF(無効)であるかに関係なく、エージング・プロセスがすぐに開始します。エージング・プロセスは、ttAgingScheduleNowをコールした結果として1回のみ発生します。これによって、以前に設定された属性が変更されることはありません。

エージングがすでにオンになっている場合、ttAgingScheduleNowは、ttAgingScheduleNowがコールされた時間に基づいて、エージング・サイクルをリセットします。

エージングを外部的に制御するには、ALTER TABLE ... SET AGING OFFを使用してエージングを無効にします。次に、ttAgingScheduleNowを使用して、必要なときにエージングを開始します。


注意: ttAgingScheduleNowのコール時にルート表の名前を指定してください。指定しないと、ttAgingScheduleNowによって、キャッシュ・グループのルート表だけでなく、エージングが定義されているデータ・ストアのすべての表に対するエージングが開始またはリセットされます。

エージングとON DELETE CASCADEの連携

LRUエージングが有効で、子表の行が最近アクセスされた場合、親行も子行も削除されません。

時間ベースのエージングが有効で、親表の行がエージング・アウトの候補である場合、親行とそのすべての子が削除されます。

詳細は、「ON DELETE CASCADE」を参照してください。

スライド期間の構成

時間ベースのエージングを使用すると、キャッシュ・グループ・データにスライド期間が作成されます。スライド期間を持つキャッシュ・グループでは、キャッシュに特定の時間間隔を満たすデータのみが含まれるように、定期的に新しいデータが追加され、古いデータが削除されます。

キャッシュ・グループ・データにスライド期間を構成するには、増分AUTOREFRESH属性を使用し、時間ベースのエージング・ポリシーを指定します。AUTOREFRESH処理では、Oracle表のタイムスタンプをチェックして、キャッシュされた表に新しいデータを挿入する必要があるかどうかを判断します。SYSDATEおよびタイムゾーンは、OracleとTimesTenで同じである必要があります。

他のタイプのキャッシュ・グループに対するスライド期間を構成するには、手動ロード、透過的ロード、リフレッシュまたは挿入を使用して新しいデータをキャッシュ・グループ表に挿入します。

例4.31

次の文は、スライド期間のプロパティを持つキャッシュ・グループを作成します。

CREATE READONLY CACHE GROUP cg1

  AUTOREFRESH STATE ON INTERVAL 1 MINUTES

  FROM t1(i NUMBER NOT NULL PRIMARY KEY,

          ts TIMESTAMP NOT NULL,

          c VARCHAR2(50))

  AGING USE ts LIFETIME 3 HOURS CYCLE 10 MINUTES;

cg1キャッシュ・グループの自動リフレッシュ間隔は1分です。このため、Oracle表の新しいデータは、1分ごとにキャッシュ・グループに挿入されます。

エージングでは、10分ごとに古いデータがチェックされます。エージングによって、3時間以上経過したデータが削除されます(ts < SYSDATE - 3 HOURS)。

AUTOREFRESH間隔およびLIFETIME間隔に対して設定したパラメータによって、データがキャッシュ内に保持される時間が決定します。存続期間の間隔に満たないうちにデータがキャッシュからエージ・アウトされる可能性があります。たとえば、AUTOREFRESH間隔が3日で、LIFETIME間隔が30日である場合、データはキャッシュに入るときにすでに3日経過している可能性があります。このようなデータは27日後にキャッシュから削除されます。このような状況が発生するのは、エージングがTimestenタイムスタンプではなく、Oracleタイムスタンプに基づいているためです。